perm filename FINDER.FAI[HAK,HPM]4 blob
sn#252567 filedate 1976-12-05 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00014 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 TITLE FINDER
C00006 00003 SUBTTL DATA STORAGE
C00011 00004 SUBTTL ALARUMS AND DIVERSIONS
C00013 00005 SUBTTL VARIOUS FLAVORS OF OUTPUT STUFF
C00021 00006 USRMOD: PJOB 2,
C00023 00007 SUBTTL FIND
C00025 00008 SUBTTL THINK ABOUT PRIVILEGES
C00031 00009 SUBTTL LIST USER DATUM.
C00035 00010 SUBTTL MODIFY A USER'S INFO ENTRY
C00039 00011 SUBTTL READ UFD
C00040 00012 SUBTTL DREAD READ A WHOLE FILE IN DUMP MODE.
C00043 00013 SUBTTL INITIALIZE
C00046 00014 SUBTTL DO-ALL SCANNER. MAXIMUM UTILITY AND INTOLERANCE.
C00051 ENDMK
C⊗;
TITLE FINDER
EXTERN JOBFF,JOBREL,JOBDDT
;ASSEMBLY FLAGS
PTYBIT←←4000 ;LINE CHAR. PTY LINE
IMPBIT←←1000 ;THIS AND PTYBIT MEANS THIS IS AN IMP
JLOG←←10000 ;JOB IS LOGGED IN. BIT IN JBTSTS
PDLEN←←20 ;SIZE OF PUSH-DOWN LIST
UFDN←←4 ;LENGTH OF UFD ENTRY
MFDTRK←←1 ;TRACK WHERE MFD IS FOUND
INFON←←5 ;LENGTH OF INFO DATA AREA
INFBAS←←13 ;LOCATION OF INFO DATA IN RETRIEVAL
PTYJOB←←270 ;CELL TO PEEK IN TO FIND PTYJOB
TTYNUM←←221 ;CELL TO GET DATA ABOUT THE NUMBER OF TELETYPES.
PRJPRG←←211 ;POINTER TO PRJPRG IN SYSTEM
; INDICIES TO INFON
LOSPSW←←0 ;PASSWORD INDEX
PRVBIT←←1 ;USER'S PRIV. BITS
LASDAT←←2 ;LAST DATE WHEN HE WAS LOGGED IN
DEFPRO←←3 ;DEFAULT PROTECTION
DSK←←17 ;READ/WRITE CHANNEL FOR DSK.
DMP←←16 ;DISK FOR DUMP MODE
TTY←←15
DPYBIT←←400000 ;III BIT IN GETLIN
CTYBIT←←200000 ;CTY
DDBIT←←20000 ;DD BIT IN GETLIN
CTLVF←←40 ;FLAG TO REMEMBER CTLV MODE
PTYLIN←←200 ;SET IF PTY
CTYLIN←←400 ;SET IF CTY LOGIN
DPYLIN←←1000 ;SET IF EITHER III OR DD DISPLAY
NEGF←←10000 ;SET TO FLUSH A PRIVILEGE
NODATE←←20000 ;SET TO PREVENT LASDAT UPDATE
NOTNOW←←40000 ;SET IF NOLOGIN IN SYSTEM ≠ 0
IMPLIN←←100000 ;SET IF THIS IS AN IMP
;PRIVILEGE BITS
INFPRV←←20 ;ACCESS TO INFO DATA IN UFD
PROPRV←←100000 ;RENAME THRU FILE SYSTEM IS OK
REAPRV←←40000 ;READ THRU FILE SYSTEM IS OK
WRTPRV←←20000 ;WRITE THRU FILE SYSTEM IS OK
DAWPRV←←200000 ;DISK ABSOLUTE WRITE PRIVILIGE
LUPPRV←←1
LOGPRV←←DAWPRV!INFPRV!PROPRV!REAPRV!WRTPRV!LUPPRV ;PRIVILEGES FOR LOGIN
FL←0 ↔ A←1 ↔ B←2 ↔ C←3 ↔ D←4 ↔ W←5 ↔ X←6 ↔ Y←7 ↔ Z←10 ↔ K←11
L←12 ↔ M←13 ↔ N←14 ↔ TAC←15 ↔ TAC1←16 ↔ P←17
LOC 137
13 ;JOBVERSION
RELOC 0
SUBTTL DATA STORAGE
LPBITS: XWD 400000,'PRI' ;PRIVILEGE PRIVILEGE
XWD 200000,'DAW' ;DISK ABSOLUTE WRITE
XWD 100000,'PRO' ;FILE SYSTEM RENAME
XWD 40000,'REA' ;FILE SYSTEM READ
XWD 20000,'WRT' ;FILE SYSTEM WRITE
XWD 10000,'UDP' ;UDP EXTENDED ACCESS
XWD 4000,'UPG' ;SELECT OTHER III'S
XWD 2000,'MES' ;TTYMES UUO
XWD 1000,'KIL' ;CONSOLE KILL COMMAND
XWD 400,'DEV' ;DET/ATT DEVICE
XWD 200,'SEG' ;SEGMENT ACCESS PRIV
XWD 100,'SSL' ;SET SYSTEM SERVICE LEVEL TABLE
XWD 40,'ACW' ;ABSOLUTE CORE WRITE (SETPR2)
XWD 20,'INF' ;DISK ABSOLUTE READ
XWD 10,'TLK' ;CAN DO TALKS
XWD 4,'FBW' ;FAST BAND WRITE OR WRONG
XWD 2,'XGP' ;XGP FONT ACCESS.
XWD 1,'LUP' ;The Not Telnet Privilege
LPBLL←←.-LPBITS
RPBITS: ;RIGHT SIDE BITS.
RPBLL←←.-RPBITS
ALLPRV: 777775,,0 ;THESE ARE THE LEGAL ONES FOR USERS
;NOTE: XGPPRV ISN'T ALLOWED.
GOD: ' 1 1'
CRLF: BYTE(7)15,12
MONTHT: SIXBIT/JAN/
SIXBIT/FEB/
SIXBIT/MAR/
SIXBIT/APR/
SIXBIT/MAY/
SIXBIT/JUN/
SIXBIT/JUL/
SIXBIT/AUG/
SIXBIT/SEP/
SIXBIT/OCT/
SIXBIT/NOV/
SIXBIT/DEC/
MONTLG←←.-MONTHT ;LENGTH OF MONTH TABLE
FILBLK←←2 ;NUMBER OF BLOCKS OF THE FILE TO READ
;WARNING!!! FILBLK MUST BE AT LEAST 2.
FILENG←←FILBLK*200 ;NUMBER OF WORDS TO READ
INRD: 'GODMOD' ;FOR MTAPE TO READ INFO AREA
1 ;READ
IOWD 40,FILE0 ;IOWD FOR TRANSFER
INRD1: 0 ;XWD RECORD,TRACK NUMBER
RDINFO: 'GODMOD' ;READ RETRIEVAL INFO
10
INFOS
WRINFO: 'GODMOD' ;WRITE RETRIEVAL INFO
11
INFOS
DEBUG: 0
DSKBUF: BLOCK 3 ;BUFFER HEADER
TTYOBF: BLOCK 3 ;BUFFER HEADER FOR CHANNEL "TTY"
TTYBUF: 0 ;ADDRESS OF BUFFERS FOR USER CONSOLE
DISKBF: 0 ;PLACE TO PUT DISK BUFFERS
NOW: 0 ;SET TO DATE,,TIME IN MINUTES WHEN STARTED
DBLOCK:
USER: 0 ;USERS PPN
USRBIT: 0 ;USER PRIVILEGE BITS
LBLEN←←.-DBLOCK
UFDLOK: BLOCK 5 ;4 WORDS FOR UFD RENAME BLOCK, 5TH FOR FLAG
PDLIST: BLOCK PDLEN ;PUSH DOWN LIST
GOTUFD: 0 ;HAS USER ALREADY GOT A UFD?
INFOS: BLOCK INFON
PHRASE: BLOCK 2 ;PROJECT/WD 1, PROGRAMMER/WD 2.
MFDPT: 0
LPTBUF: 0
BUF: ;THIS IS A PUN. USED FOR READING LOG.LOG
FILE0: BLOCK 40 ;BLOCK FOR THE RETRIEVAL
FILE: BLOCK FILENG ;BLOCK FOR FIRST BLOCK OF FILE
MUDPTR: BLOCK 2
YEAR: 0
TIME: 0
FILLCH: 0
BASECH: 0
RAD: TZAP: 0 ;RADIX FOR ALLRAD PRINTER.
; TZAP IS LAST WORD ZEROED BY BLT AT START
LASLOG: 0
DAYTAB: ASCIZ /Sunday/
ASCIZ /Monday/
ASCIZ /Tuesday/
ASCIZ /Wednesday/
ASCIZ /Thursday/
ASCIZ /Friday/
ASCIZ /Saturday/
CKCODE: -1 ;SET TO ZERO IF LOSER IS NOT AUTHORIZED.
PATCH: BLOCK 20
PATCH1: BLOCK 20
PATCH2: BLOCK 20
JOBQUE: 0
JBTSTS: 0
JOBN: 0
SVSTAT: 0
LINCHR: 0 ;TTY LINE CHARACTERISTICS WORD
PTYTJB: 0 ;JOB NUMBER OF CONTROLLER IF THIS IS A PTY.
PTYPPN: 0 ;PPN OF CONTROLLING JOB FOR PTY LINES.
CHTEMP: 0
TYIBUF: BLOCK 50 ;BUFFER FOR SPECIAL HACK MODE
SUBTTL ALARUMS AND DIVERSIONS
NODISK: OUTSTR [ASCIZ /CAN'T INIT THE DISK
/]
EXIT
NOCORE: OUTSTR [ASCIZ/Core uuo failed!
/]
EXIT
UFDEER: OUTSTRλβ7¬'π∪4=πC\OPA[CW∀As←kHA]Kn↓kMH~(←:~∀%1∪($∩~∀~)+
→∃$t∪∨U)')$%7β'π%4←+
⊂A→←←-k`AM¬SYKH8@←:~(∪πβ∪0∪∧Y+∃%%)_4∀∪≠∨Y∩∪∧0`∩∩w1∨'$↓→∨'H~∀∪∨U)')$%↓+%I)∧Q∧$∩w∂∪Y
A≠M'β∂
↓
%∨~↓)β¬→∀~∀∪∨U)')$%π%→4∀∪1%(∩∩~)+%%Q∧t∪7¬'π∪4=+≥↔≥=/≤A'Qβ)+&=:~∀∪mβ'π∪h←∪→→∃∂β_AA!≤←:4∀∪7βMπ∪4←A%∨)
)∪∨≤=:~∀∪mβ'π∪h←%≥¬≠
AI%∨$←t~∀∪7¬'π∪4=%≥β5
A%I∨$←:4∀∪7βMπ∪4←I≥β≠∀A%%=$←:~(∪7β'
∪4←≥¬≠&A
∨≥
→%π(←:4∀∪7βMπ∪4←9≡A∪≥%(←:~(∪7β'
∪4←¬¬λA≠
⊂A≥)I2←:~(∪7β'
∪4←+→λA∂βI¬β∂⊂←:~∃U%%)1?>\[U%%)λ~∀~∀4∃≥∨+→λt∪∨U)')$%7β'π%4←∩A
β≤O(↓
∪≥λ↓)⊃
AU
λA)!β(A∩↓∃+'(↓≠β
↓
∨$Ae∨*B~(←:~∀%1∪(4∀_∪'+ ))_∪Yβ%∪∨U&A
→¬-∨%&↓∨A∨U)!+(↓')+
_~∀v∪=+)!+PA%∨+Q∪≥&8Aβ→_↓%∨+)%≥&AU'
A!U)π⊃$↓)≡A)e!
~∀l∪∨≥
↓π⊃β%¬π)$↓∨≤Aπ!β≥≥0A))28@A)⊃%&Aπ⊃¬≥≥_↓∪&A∪9∪)∪β1→2~∀l∪)⊃
↓+'$↓π∨≥'=→
XA +(A≠¬2A¬
↓'/∪)
⊃λAQ≡A)⊃∀A→!(4∀v∪
=$A)⊃∀A_Aπ=≠≠β≥⊂A
%∨4A6bXI:A+'∃$A≠∨⊃
\~∀4∃→!)I→&t∪M↔∪!≤%αY→!Q¬+∩mβ''+5
A→!PA¬+
→$A∪LAβ(A!∪∂⊂A
∨%
~(∪!∨!(∪ X∩$w≥≡A +
I&[≥≡↓%→¬'
~∀%≠∨-4∪αY∃=¬
∩$w%π1β∪~AQ⊃
A'Aβπ
~(∪π→∨M
∪))dX∩∩w→∨%π
↓∨+(A¬→_A)!
A βQα~∀∪M)5~%→!)¬U∩∩wi%≡AQ⊃
A¬U
$↓!∨∪≥Q$~∃Q)3∪≥$t∪∪≥%(∪))dX`∩∩m∂(AQ⊃
A)Q2~∀∩≥))2@@N∩∩m+'$↓π∨≥'=→
~∀%1/λ∪Q)3∨¬_X`∩w=+)!+PA∨≥→d~∀∪⊃¬→(∩∩$w)⊃∪LAπβ≤≥(A⊃βA!≤~(∪'↔∪A≤∪αYQ)3¬+_∩w ∪⊂A/
A!β-
A +
I&A∨≥
A¬→∨%
}4∀∪∃%M(∪))e∪≤b∩$w≥∨!∀\A≠β-
A≥\A∨≥L~∀∪aπ⊂∪α1∃∨¬
_∩∩w3∃&A%M(A∃=¬
~(∪∨+) +∪)Q2Xd∩$w%'∃(A)⊃∀A∨→λ↓¬+
∃%&~∀%≠∨-4∪αY∃=¬
∩$w%'Q∨%
A)∨¬
4∀∪!∨A∀∪ X$∩wβ→0A ∨≥∀~∃))e∪≤bt%≠∨-
%αY∃∨
∩∩m∂(A)∨¬
4∀∪≠∨Y~∪α1))3¬U~∀∪=+)¬+_∪))20d∩∩w≥(A'=≠
A¬U
%L~∀∪!=!∀∪ 0∩∩w%∃)+%≤4∀~∃→A)∪≥∩h∪∪≥∪P∪))20`∩∩w≥(A)!
A→!PA∨≤A
⊃β≥≥∃_A≥β5λA)Q2~∀∩≥→!(@@N~∀%1/λ∪Q)3∨¬_X`~∀%∃%'(%→!)∪8b∩∩w9≡A→!PAβ-β%→β¬→∀~∀∪≠=-
∪α1∃∨¬
_∩∩w∂∃(A)⊃∀A!%M≥(A)∨¬
4∀∪≠∨Y~∪α1→!)¬U∩w'¬-
AβLAβ I'&A=A)⊃∀A→!(↓¬+
∃$~∀∪=+)¬+_∪))20d∩∩w≥(A'=≠
A¬U
%L~∀∪∃I'(∪πA∨!∀b$∩w'↔% A%Q+%≤~)→!)∪8bt∪∨U)')$%7β'π%4←→!PA∪&A9∨(AβYβ∪→β →
\~(←:~∀%!∨!∀% X∩∩m%)+I≤~∀~)!+)π!$t∪'-∪!≤∪1!)¬+_∩∩w∨9→2A <A∪(AQ⊃
A⊃¬%λA/¬2A
∨HA→!(4∀∪∃%M(∪!+Qπ⊂d~(∪'∨'≤∪))3=¬Vd$w πI≠≥PAπ⊃βIβπ)HAπ∨+9(~∀∪=+)!+P∪))20∩∩w/I∪)
A∧A¬+
→$~∀%∪ !∧%αY))e∨¬VD∩w A∨'∪(↓π⊃β%¬π)$↓∪≤A¬U
$4∀∪!∨A∀∪ X4∀~∃!U)π⊂dh∪))π¬→_∩b1α∩∩w]%∪)
↓∨≥
A
⊃β%β
)$~(∪!∨!(∪ X~(~∃!+Q')$t%⊃%→∩%∧Xhh@n``∩lnA¬∪PA¬3)∀A!∨∪9)$A%≤A∧~)!+)'Pbt∪∪1 ∧∪α1∧∩∩w1∨βλA∧A¬3)∀~∀∪∃U≠!
∪∧Yπ!∨A∀∩∩wI)+%8A∪A9+→_~(∪!+'!∀∪ YA+)π⊃H∩w/%%)
Aπ!β%βπQ$~∀%∃%'(%!+)'Pb∩∩w1∨∨ ~(~∃
∨+(t%'↔∪!∧∪∧Y6De:∩∩m)⊃
A β'
~)∨π)∨U(t∪≠=-∩∪λXb`∩$w¬β'∀A
∨$↓∨π)β0~∀∪≠=-~∪λY%βλ4∀∪'Q4∪)βX~∀∪5∨-∩%∧XD`λ~∀∪≠=-~∪λY¬β'∃π⊂∩wMβ-
A β'
A
⊃β%β
)$~)β→→%¬λt∪∪⊃∪,∪α1%βλ∩$w ∪-%
A¬dA)⊃
↓%β ∪`~∀∪⊃I→~∪∧0Q R∩$w'β-∀A%≠¬∪≥ H~∀∪'U¬∩∪)¬εXb∩$w πI≠≥PA)⊃
↓π⊃β%¬π)$↓π∨+≥P~∀∪∃U≠!
∪∧Yβ→→Iλb∩w)+≠ A%A ∃ A≥=+∂⊂~(∪!+'!∀∪ Y¬→→%β⊂∩w≥≡8A≠β↔∀AαA%∃π+%'%-
Aπ¬→_~∀%∃%'(%β→→%⊂f∩∩w +¬¬→∀A+ A→%∨~AIπ+%M∪∨≤~)β→→%⊂bt∪≠=-
∪α1
∪→→
⊂∩w∂∃(A)⊃∀A
∪→0Aπ⊃βIβπ)H~∃β→1%λdt%'∨∃_%)βεY¬→→%λL∩wβ→0A ∨≥∀A/∪) A
∪→0}~∀∪A+'⊃∀% Y!+Qπ⊃$∩m≥≡\A]%∪)
↓∨≥
A
⊃β%β
)$~(∪∃%'P∪β→→Iλd∩∩m→∨∨ 4∃β→→Iλft∪!→%4∪∧XQ R4∀∪β ⊂∪αY¬¬'π⊂$wβ λ↓)⊃
A β'
A
⊃β%β
)$~(∪∃%'P∪!+)
⊃$∩∩m/%∪)∀AαAπ!β%βπQ$Aβ9λA!∨A∀\~∀4∃)/∨⊃∪∞t∪5∨-∩%∧Xbd4∀∪≠∨Y~∪∧1%βλ~(∪≠∨-∃∩∪)βXd~∀%≠∨-$∪∧XD@D~∀∪5∨-~%∧Y
∪1→π⊂~(∪≠∨-∃~∪∧Y β'π ~∀∪∃I'(∪β1→%βλ4∀~∃'%1∨+(h∪≠∨-∀∪)βεDYα∩∩m∂(AQ⊃
A'%1¬∪(↓∪≥)≡↓)βεb4∃'∪1=*bt∪)+≠!
%)βεb1π!∨!(∩w%Q+%≤A%Aβ→0A ∨≥∀~∀∪'∃)4∪)¬εX∩∩m5%≡↓∪≤A)¬ε~∀∪1'⊃ε∪QβεP⊃0H%n6⎇2∃α∞Bqα&:$yαRε_h(&6⎇2⊗$&
a ↓ E"ε
$KZ6ε.*α∞"ε∀
∞R⊗∩α&9αλh(&B-~"(&αbBVR≤BH4(LRJNPM~&b>+λ$%ndz>@4Ph*Rf4J1h&¬*N"(M↓2N ≠ u- ↔:EM∧TλdLdT dlTλe∀|Tλ⊂hP→ DeP_%D⊂H↔8t-"
I∧*∧[
D,u9→tph!→%,mλQ∀∩d: u∧P⊃↔4tzλ[¬$,j9∀|pQ!∀l⎇hY⊂L
D%b⊂h!~¬-≤ !∃αe
ZD≤E!Q LlzhPL
H!PPL**5 M9≠∧⎇-A⊃∪]=)~D*∧Yz$(h!Q%%M
cPL
)EPL%H⊂HK8xU"¬IλR¬¬)xphP~
U≤@~¬D⊂H↔:4
4QQ LDIK L∩H⊃⊂K\xZB¬$λT¬¬∀y!PPLYzd,H_∃B∃Z!Q M¬Z9∧PM¬J¬-$9
hP→Yu4(_∃D⊂h!~¬-≤ !∃αe9≠∧⎇-AQ LlzhTHL∃D"b⊂Q!∃¬-9 MαJ
U$≤
!PPM zMαH⊃PPM
Z4DP~¬E≤M zU h!→T⎇4Y⊃∀
b+T hP→*%≥ ~
U$≤
!PU$IzU#P→*Tm∧Q_∩e$IzU%@⊃↔4U,Z∧∧L2 ir∧,jJ%J∧λZ$(h!→∧e∃!_"dλ⊃⊃∪\<ZD¬$DTλD
$QQ LE*+ L
H⊃⊂HK8xU"¬IλR¬$→XPhP~
U≤@~¬DλH⊃↔5≤
hT¬$LXQPPL_I∃4H_%C≠8⊃⊃∪\<ZD¬$DTλD
J →b∧_Q!∀l⎇hY⊂L
F∃∧~H⊃⊃∪]≤~hR∧$≠∀∧|2 Ytu$↓Q LLI~dHL%F∪ H⊃↔4<-D T|uI∧∧Lrλ1PPL_HDHL%F∪βQ!∀l⎇hYPL∩K_T
⊂⊃⊃∪]≤~hR¬LX~ hP~
U≤D!~αd$X9u- ⊃↔5=∀~HR∧$X9∀lAQ LlzhTHL∃D"j⊂⊃⊃∪]=)~D*αQQ M¬Z9∧PM¬J¬-$9
hP→Yu4(_∃Dl|jI¬"D5⊃⊂K\xZB¬$λT∧tXT∧|2 Ytu$↓Q M¬Z9∧PM¬J4MDzZ@hP→Yu4,⊃_∩b∩T!PPM
Z4DP~¬E¬-H9¬⊂h!→T⎇4Q_∩eLX~ hP~
U≤D!~αd$X9u- Q!∀l⎇hY⊂L
F⊗⊂hP~
U≤D!~αe¬ZH4E⊂Q!∃∧⎇↓~αdλQ!∀L$~i⊂L
Fv@HH↔9∧⎇-*4∧Lrλ∃DlLjZD-~ →b∧⊂Q!∃¬-9↓∃αd!Q M¬Z9∧PM¬JE<|I_phP~ uM¬H⊂hP→*%≥ ~Jt|$_q⊂K]z)∃$*
Jtz∧Yz$*∧→hB¬∀ZJU∀pQ*D$⎇ZKβPLYzd,H_∃Cλ⊃⊃∪\<ZD∧
¬H_ hP~
U≤D!~αe¬ZH4E⊂⊃↔5=∀~HR∧|hQPPL**5 M
ZD≤E!⊃⊂K]z)∃$*
Jtxh)It<|g!∃%∀hQ∀4bJ
ELd→aPPM z∧PM¬A⊂K\izDDLht∧4⎇$
¬%Jz1PPL J%PL∃Id⎇8⊃↔4<-D
DD*λ:U∃∀YjB∧$~HPhP→_DM4⊃_∩c≠qQ LlzhTHLEF∩D∩⊃⊃∪\<ZD∧$
∀ t2∧Yye$B →b∧ Q!∀L$~i⊂L
F⊗@HK;_T
∩ →b∧
D T|uI∧∧Lrλ!PPMJ)dpL∃F0HK:94Mα _b∧tzD∧d,~∧¬L,~!PPL8→∀<(_%C⊂H↔:4\M∧ ∀2∧_jD-∩λhT∃∃X~%J∧yd∧d,~∧¬L,~!PPM:X$HLEF⊂HK9iu"∧HX∃α¬_X∃∩αd
∧
≥Dλd,∩d
5,∃J(∀≥"ε⊃PPL_HDHL∃F0HK9(∀rβ∃DβKfD¬<
4λ∩¬<XId-≤H≠⊂hP__D LEH⊂hP→J4@L∃ES⊂H↔8DM2λ+∩β" X∀\*∧4∧|2 HT
α_T
∃4
4Lt8T∧Tdεc h!_∀$ _∃D H↔8$
≤Tλd⎇∩
I∧M~λH∃J∧→hB¬LX~ hP→Yu4(_EE[β66c#f&Sβ≠[W4l|jIα∧|hj4-"
yu∀ Q!∃∀⎇A_Bc
λ%⊂hP~)u LEF∩D∩⊃Q M∀zA∀"c∃λ"Hh!_∀t$⊃_Bc8Q!∀$A_∩d Q!∀L$~i⊂L
FqPPLJ9L∩F⊃⊂K\IzT∀dT
DD* →d$-∧
deXQPPLzZE≥%!_D
MH_"D∩⊃Q L⎇ZJ5%⊂≠8∃≤≤≠%pJ⎇Q↔5%MλT∧
¬H_ hP→Yu4(_∃Dt⎇qQ M¬Z9∧PM¬JD$⎇ZA⊂K]K~∧*∧~APPLYzd,H_%D≥∀HaPPM
Z4DP~¬E¬-J:E⊂h!_4d⎇8Q∃%%∃A⊂K\iz$≤* ~B∧⎇ZAPPM z∧PM¬A⊂K](ZE-∀aQ hTx:DLsπ!∀⎇-J:E⊂M8~4≤M%y∀ddXx∀b∧9λ∃∀:HU∩∧→d∧|≥H→B¬≤8→brα
D,
8T¬%∃∀λ∀<→aPR⎇QQ$|≥I→cPM8ZET⊂_∃D_H↔84d,~$¬≥,88U≥~λiD:Dλ∀≤≥YZTd
Iz hTx:DLs↔!∀Lt9
t`L!Q L≤→→`L∩F⊗PhP→*%≥ →x5$Lf⊃PPL8→∀pL%F∪⊂h!~∧⎇∧!~α`H↔83sα _b∧k~DDLht¬≤,YaPPL*YU∧`_5D|≥I→cK9ydeJλ:$d2λ→Dd⎇xXB∧jHU∩βqQ LUYZ∧8L5It≥$→f K[t d⎇"λ→Dd⎇xXB∧jHU∩∧I_tM Q!∀≤→a∀∩b't hP~9tTλ_5D|≥I→cλK87Cα∧iz"∧DYJα¬∀Z~T-≥AQ$|≥I→c∪P_8∀L`_%B∪α!Q L≤→→D(L%D#:⊂Q!∀U∃:A∀|≥I→cH↔8U∃∀z!PPLJ9L
F1PPL_HDHL∃ER∪α%λ"Hh!_∀|T⊃_2d|:I∀sλ↔9D|⎇↓Q USRMOD: PJOB 2,
MOVEI 1,271
PEEK 1,
ADD 1,2
PEEK 1,
JUMPL 1,GOO
EXIT
GOO: MOVE 1,[777777,,0]
SETPRV 1,
SETZM LPTBUF
PUSHJ P,TTYINI
UCON: PUSHJ P,RMFD ;READ THE MFD
UCMSG: OUTSTR [ASCIZ/
E EXIT
M MODIFY
F FIND USERS
P PRIVILEGE NAMES
/]
SKIPE JOBDDT
OUTSTR [ASCIZ/$ DDT
/]
UC: OUTSTR [ASCIZ/*/]
INCHWL A
CLRBFI
CAIL A,"a"
CAILE A,"z"
JRST .+2
TRZ A,40
MOVSI B,-UCTL
HLRZ C,UCT(B)
CAME A,C
AOBJN B,.-2
JUMPL B,UC1
OUTSTR [ASCIZ/?
/]
JRST UC
UC1: HRRZ C,UCT(B)
PUSHJ P,(C)
JRST UC
UCT: XWD "E",UEXIT
XWD 12,CPOPJ
XWD 15,CPOPJ
XWD ">",FIND
XWD "∃",MODIFY
XWD "$",DDTGO
XWD 175,DDTGO
XWD "H",UCTYPE
XWD "P",PTYPE ;TYPE PRIVILEGE NAMES
XWD "&",ITYPE ;TYPE STUFF
XWD "↔",ILIST ;LIST STUFF
UCTL←←.-UCT
DDTGO: SKIPN JOBDDT
JRST NODDT
OUTSTR [ASCIZ/(DDT)
/]
JRST @JOBDDT
UCTYPE: POP P,(P)
JRST UCMSG
NODDT: OUTSTR [ASCIZ/NO DDT
/]
POPJ P,
UEXIT: EXIT 1,
SUBTTL FIND
FIND: OUTSTR [ASCIZ/USER = /]
PUSHJ P,SIXIN ;GET SOME SIXBIT
HRRZM B,PHRASE ;SAVE PART 1
CAIN A,"," ;MUST SEE A COMMA
JRST FIND0 ;COMMA
CAIE A,12 ;NOT COMMA: NEED LF
JRST FNDERR ;I DON'T UNDERSTAND
JRST FIND0A ;OK, B WILL BE USER NAME
FIND0: PUSHJ P,SIXIN ;GET ANOTHER
HRL B,PHRASE ;GET THE OTHER PART
FIND0A: MOVEM B,USER
CAIE A,12
JRST FNDERR
MOVE D,MFDPT
AOJGE D,CPOPJ
PUSH P,LPTBUF
SETOM LPTBUF
FIND1: SKIPN A,USER ;LOAD THE MASK
JRST FIND2 ;ZERO MASK: TYPE ANYTHING
MOVE B,0(D) ;MASK ∧ ¬ NAME
TRNN A,-1 ;SKIP IF PROG NAMED
TRZ B,-1 ;NO PROG NAMED. SET PROG TO 0
TLNN A,-1
TLZ B,-1
CAMN A,B
FIND2: PUSHJ P,TYPEX ;TYPE USER NAME
ADD D,[XWD UFDN,UFDN]
JUMPL D,FIND1
CLOSE TTY, ;FLUSH OUTPUT
POP P,LPTBUF ;RESTORE OLD BUFFER POINTER
POPJ P,
FNDERR: OUTSTRλβ7¬'π∪4=∪≥-β1∪λA∪Q~~∀=:~∀∪
→%¬
$~∀∪!=!∀∪ 0~∀_∪'+ ))_∪Q⊃∪≥⊗↓β¬∨+PA!%∪Y∪→∂∃&~∀~)!%-)e t∪!U'⊂∪ 1α∩∩wMβ-
AQ⊃
A!HA¬∪)L~∀∪≠=-∩∪∧Xbb∩$w/%∪Q
AαAQβ∧~∀%!+'⊃(∪ Y!U)π⊃$$v\\~(∪⊃→→h∪_X`! R∩∩m∂(AQ⊃
A!HA¬∪)L@Q→→(R~∀%≠∨-'$∪~X[1!¬→_$w∂(↓)⊃
A1≥∂) A∨AQ⊃
A)¬¬→
~(∪∃+≠A
∪~YA%-) L∩w⊂
,jAα&2α:=αd*~Qα≤J∩∃α∀JRL4UαJZRβ h&R$r8&1dbB
&%→"5$KZN⊗∃∧J→α¬∧∩&QαM→αN⊗ h(&*∃~P&B∃2RAHHIn:>∧(4(&E∩2h&
b2B
M"M"5HIn≡⊗"αR"∃¬αJ&Y∧rε6∀hP&BV≤B(&Ae~&b>- %nRMα∃αNMB
&PhP&6>4*$&¬b⊃↓λ4PJBVNDP&A2¬*R∞"⊂In↑JM"∃ᬬ~Bε∞(h*BJ5"AIhL
>
*pJ52B∃2RADKZ2>>h*BJ5"AMhMα>@&αb0$%\:⊗Qα$B∃α
M"Mα
~,4(LBJ2hLa20$KZ≡⊗Q¬""∃α∀J≡"Q¬~&∩∃∧∩&RM∧J9αRD)α2⊗5 4(&lzZN$Li16J∧∩204PJ*V6∧(&52≥α>B(hRBJZ%↓Qh&$":8&bbJB
M"M"5Hh(&*∃~P&B∃2RAThP&"JeP&¬2∃α
&R~B5$4PJBVNDP&A2≤Jb>V h(&6⎇2⊗$&
a ↓λhP&BV≤B(&AeαVR∞E⊂4*B∃2RAUPJε>
Tp&52¬∩ZRA h(&B⎇α(&A`h(4*¬∩Z≡⊗#P&6>4*4&¬eα"Jε≤)-D%]~εZ∃∧z2⊃α¬∩&Y9¬~⊗P4PJ6>Z,h&¬2∧BJεN(InNε4)α"⊗∀)αR>xh(&*,jB∀&
bBJZ=!@%n
~-α~⎇⊃α:⊗:αBJ&5_4(&⎇*RNR⊂JnεN≤Ji>ε$"⊗⊃>hh(&*∃~P%9[⊂4*B∃2≡QAPJ>VR≥"H&n
~∞&i|r⊗]>hh(&>-"NRHMZεN∞MQ=αB∀JZ&2,:⊗Miα↓>t4UαJZ≡# h&B-~"(&αbN&bLp$%n<*QαN|j∃αNMB
&Q∧rε6∃∧J9αλhP&6>4*4&¬eαεR∞@H%nN
2∃αRD)α∩⊗dJ6&R-⊃α&9∧j⊗N∩
H4(&lzZN$Li162∧∩204PJ*V6∧(&52¬∩Z≡Q_In:=∧22ε≡~α>9α$B&Mα≤J∩∃|hP&*Vmα∀& eαJZ≡#8%n~e*N!αu*21α≥"J&:=_4*B∃2≡QIPJ"JJPJ¬22∧∩&RMDi$%n<*QαRD)α:εl)α>→∧ αBJM2&2⊗<(4(&≤
6∀&
bλ$%\~>6B
∩∃αRzα↑"ε"α↑∃α≤
\4(L
>
*pJ52B∃2≡QHhP&*Vmα≡∀&jbBJZ=!L4(LB22hL 22B∀JRM"jH%n≡-!αR"*α
&R_h(&*∃~P&B∃2≡QTHInN⊗"α:⊗]∧∩&RLhRBJZ=!Mh&lzZN$Li16J∧∩20$hP&*Vmα∀&5eαJZ≡#0%nRDJMα&~α¬α2⎇~L4*¬∩Z≡Q#P&"J∃P&¬2∃α
&R~B5$4PJ∞ε6(J¬2λhP&ε>∀R8&5eαJZ≡# 4(&U*6B≡(J52B∃2≡QXhP&"2∃P&¬2∃α
&R~B5$%\:⊗Qα$B∃α
M!αR=¬~⊗P4UαJZ≡#)h&R∀r8&~bb:⊗≡0h(&&⎇∩4&¬eα"Jε≤)-D4PJRJ:(J~12t*≡_4PJε:∩≤
4&¬eα"Jε≤)-D%]~"VQ∧z~→α∀JRL4PJ*JN JBJZ=!\$%\b>>-∧2>IαlzJ∀4UαJZ≡#1h&>-"NRHMZεN∞MQ>V:\r>↑9R↓>t4PJ"J2PJ¬2λHIn≡⊗"αR"∃∧z~~⊗u~&Z∃∧rε6∀hP&BV≤B(&Ae~&b>- %n↑∀JR∃αM 4(&⎇*RNR⊂J∞J20h*BJ4:Q]hLj>Z∀L 2Bε$~ 4(L~ε&∀L 1EHHIn2→¬~R>B~αR"∃¬:>J2 h(&*∃~P&B∃2≡QDHIn2>|Yα~>∩α6>J(h(&6⎇2∀&¬eα"Jε≤)-D4PJ6>Z,h&¬2Lr~>M]αJZ
M %nN
2∃α&rα&:~⎇_4(&∧zB(&α`$%n∀*RVJph(4*≤Jb&9PJN⊗RPJ 0$KZj⊗Jzαε9α_4(&%∩j∧&4a2:⊗<0$%nT*J=α4bε≥α4zI↓4hRN&bLqAh&%∩&~bb:⊗≡0H%nN-!α~284*NMB&9EPJ&:∞E:0&∧HIn≡⊗"α¬α∞D
Jε∞$*H4(L~ε&8L 1EThP&*J≥ &N&DJ9D$KZ~2V≤Aα∞HhP&∞εL(&¬1#4(&≤
&8&
aED4PJ*JN Jn*Vmα∃α e~&b&sλ%n&<r>J∃∧b⊗ε∩Lr≥α
d
:.M∧
:⊃α$
λ4(HJB>BPJA2tKZ⊗2N*αJ⊗R-∩84(L~ε&∀L 1 1⊂h(&∞J8&¬c H4(Mα>B(M↓0$%]∩⊗RV∀qα~>∩α2→α⎇⊃α∞>lj¬4PJ∞ε&pJ¬1 j⊂4(&U*6B∀L⊃2N&DJ9@4PJ∞ε&`J¬1
⊂4(&≤
&2∀L 1i⊂h(&*∃~P%9[⊂4(&%∩h&¬c!@4(L~ε&≤L 1Q@hP&B>∧P&A0HInJ⊗%*J84PJNV
HJ¬1Qh(&εt"$&¬c9\4(M"2:∀L⊃1]]β↓A@%\
:eα∀JRMαd*~QαLqα |hP&*J≥ &N&DJ9D$KZ:>B*α~2V≤Aα⊗b%∩¬α∞D
Jε∞$*JL4PJ2N L⊃1X4PJ&>HL⊃2∧4PJ*JN JN&bLqD$%\b>>@hP4*B∀zRfAPJR∩:pJ¬2m;9]QAαa1AAβ↓ABtKZ&→αreα>2αR"⊗≤)αεJ*α>91¬"fB∃¬~>6⊗$B&:≤hP&B>∧P&A0hP&6>4*$& eZεN∞MQ<&∪.3πW3"βCK?&+∂S'}q↓u↓⎇h4(&¬*N &αb∧$%]~εZ∃¬""∃α<zJ⊂4PJBVNDP&A2¬*RNR⊂h(&2$⊂&¬2]α>&:"↓e1"αI1btKZ≡⊗Q¬αJ>R,~R&>rp4(&¬*N"(M↓2>∞%"f@$KZRfB*α>∞R`4(&lzZ⊗$L 1EDhP&BV≤B(&AeαVR∞E⊂4(&lzZ∀&
a"A$hP&R2tp&¬1#↓@$%]""&M∧JMα&t*2⊗≡rQ1α∃*Qα%∧">9≡"αJ⊗εdbeα↑rQαRxh(&*∃~P&B∀zJ⊗PHInR"Lr-αε∀zVQαM!αR>zα"εJ h(&6⎇2⊗$&∩bnεN≤Ji<4S!A@&⊗+7?S*απ∂∂␈+;Q>hh(&B-~"(&αbBVR≥"H4*¬∩>J⊗#P&6>4*$& d~J2_hP&BV≤B(&AeαVRN%⊂4(&∧z@&Adλ4(&∧zB(&α`4(4UαJ>≡-!h&>-"NRHMZεN∞MQ>;↔:β∪↔≠∂+3Qβπ∪?S↔∨#'?9εCπ3≠>{K⊃iαzt4(Lj>Z⊗HJ 1@hRBJ>=!Eh&Lr∞"↑`J∧$%\:⊗Qα
α∞"ε∀
∞R⊗⊂h(&∞J8&¬c T4(LRJNPMαJ>≡#λ$%n4bVN!∧~H4(L~ε&∀L 1Q@hP&∞εLp&¬1λ4(&U∩NP&\RV6B*α 2B∀z≡QDKZ&≡:⎇∩∃α2,
∩&::α
2εtZMαεt!αRε⊂h($&∧zB(&αbt%n,bN∃α∀*RVJph(&∞J0&¬b⊃Aλ4PJ∞ε&d(&¬1∪9λ4(Mα>B(M↓04(LbN &∩aL4(LJ>J$L⊃15 α⊃"¬$hP&*J≥ &BJ|:QD4Ph*BRMα∃h&%"∞ε2`IM2n
~∞&i⎇##∃β∂3π'3∞∪3∃βπ∪'['f+∨↔MεK∃ih)>thP&N⊗$x&¬0hP&BV≤B(&AeαJZRM$%n%JB∃αb1α
M"L4*¬∩>:εkP&>V%~RH&\
N∞&Rx4*SF)β≠'.c∪MβNqβS#*β∪↔≠∂+3Qβπ∪?S↔∨#'?9π;?K⊃αB2!%εK∃hhQ]]]β↓@'∪.3πW3"βCK?.≠S'?rβ≠?Iεs↔]β6K3↔LhQAAA#↓@&K.k?S∃ε∂∂?.sP4)⎇h4(&∧zB(&α`4(4Tz∞RRM↓h&&$JZ$&
aE@4PJ"J2hJ 1"αH4(&U*6B∀L 19-⊂h(&B-~"(&αb>∞R%J@4(LB2JhL 1"AHh(&ε$"$&¬b⊃Aλ4PJ*JN JBVR≤BH4( SUBTTL LIST USER DATUM.
ILIST: PUSHJ P,LPTINI ;GET THE LPT.
POPJ P, ;NOT THERE
GETPPN A,
PUSHJ P,TYPPN
MOVEI B,[ASCIZ/ requested this listing
/]
PUSHJ P,PUTSTR
ITYPE: MOVE D,MFDPT
AOJGE D,LPTRLS
ILIST1: PUSHJ P,TYPEX ;CALL TYPE OUT ROUTINES
ADD D,[XWD UFDN,UFDN]
JUMPL D,ILIST1
JRST LPTRLS ;RELEASE THE LPT IF IN USE
TYPEX: SKIPE B,0(D) ;IS THERE A PPN HERE?
CAMN B,[' 1 1']
POPJ P, ;NO. RETURN
HLRZ B,1(D) ;MAKE SURE OF VAILD UFD
CAIE B,'UFD'
POPJ P, ;NOT VALID
HRRZ B,3(D) ;GET THE DISK ADDRESS
MOVEM B,INRD1 ;SAVE
PUSHJ P,DOINRD ;READ THE DISK
JRST ILIST5 ;ERROR
MOVE B,[XWD FILE0+INFBAS,INFOS]
BLT B,INFOS+4 ;BLT SPECIAL RETRIEVAL DATA
SKIPN INFOS+LOSPSW ;SKIP IF HE'S GOT PASSWORD
SKIPE LPTBUF ;NO PASSWORD. SKIP IF TTY
JRST ILIST4 ;PASSWORD OR LPT. WRITE IT
SKIPN INFOS+PRVBIT ;SKIP IF HE HAS PRIV BITS
POPJ P, ;TTY AND NO PASSWORD. SKIP THIS
ILIST4: MOVE A,0(D)
PUSHJ P,TYPPN ;WRITE NAME
MOVEI A,11
PUSHJ P,PUTCHR ;AND TAB
SKIPN A,INFOS+LOSPSW ;GET THE PASSWORD
JRST ILST4X ; IF ANY
PUSHJ P,SIXOUT ;WRITE
MOVEI A,"%"
SKIPGE 2(D) ;IF REMOTE-ONLY PASSWORD,
PUSHJ P,PUTCHR ; FLAG IT
ILST4X: SKIPN LPTBUF ;SKIP IF WE'RE ON THE LPT
JRST ILST4A ;ON THE TTY. SHORT MESSAGE
MOVEI A,11
PUSHJ P,PUTCHR ;WRITE A TAB
MOVE A,INFOS+LASDAT ;GET DATE AND TIME
TLZ A,400000 ;DELETE BIT
PUSHJ P,TDOUT ;WRITE TIME AND DATE
MOVEI A,"*"
SKIPGE INFOS+LASDAT
PUSHJ P,PUTCHR ;FLAG ILLEGAL USERS.
ILST4A: SKIPE A,INFOS+PRVBIT ;GET THE USER PRV BITS
PUSHJ P,PRVTYP ;TYPE PR BITS
MOVE A,INFOS+PRVBIT
ANDCM A,ALLPRV
JUMPE A,ILST4B ;JUMP IF NO MYSTERY PRIVS.
PUSH P,A
MOVEI B,[ASCIZ/UNKNOWN PRIVILEGES = /]
PUSHJ P,PUTSTR
POP P,A
PUSHJ P,OCTOUT
ILST4B: MOVEI B,CRLF
PUSHJ P,PUTSTR
MOVE A,INFOS+DEFPRO
JRST PROTYP ;TYPE PROTECTION DATA AND RETURN
ILIST5: MOVEI B,[ASCIZ/DISK ERROR READING UFD
/]
JRST PUTSTR ;WRITE STRING AND POPJ
SUBTTL MODIFY A USER'S INFO ENTRY
MODIFY: OUTSTR [ASCIZ/USER = /]
PUSHJ P,GETP
POPJ P,
SKIPE A,PHRASE+1
SKIPN PHRASE
JRST FNDERR ;MAKE ERROR MESSAGE
HRL A,PHRASE
MOVE D,MFDPT ;GET POINTER TO MFD
AOJL D,MODIF1 ;MAKE DIRECT POINTER
OUTSTR [ASCIZ/MFD IS EMPTY?
/]
POPJ P,
MODIF1: CAMN A,(D) ;LOOK
JRST MODIF3 ;FOUND ONE?
MODIF2: ADD D,[XWD UFDN,UFDN] ;FORGE ON
JUMPL D,MODIF1 ;LOOP
OUTSTR [ASCIZ/NO SUCH UFD.
/]
POPJ P,
MODIF3: HLRZ B,1(D)
CAIE B,'UFD'
JRST MODIF2 ;THIS IS NOT A UFD
CAMN A,[' 1 1']
POPJ P,
PUSH P,D ;SAVE POINTER TO UFD
HRRZ B,3(D) ;GET THE TRACK ADDRESS
MOVEM B,INRD1 ;SAVE
PUSHJ P,DOINRD ;READ RETRIEVAL
JRST ILIST5 ;ERROR
MOVE A,[XWD FILE0+INFBAS,INFOS]
BLT A,INFOS+INFON-1 ;GET THE DATA TO A CONVENIENT PLACE
PUSHJ P,MTYPE ;TYPE DATA FOR THIS GUY.
OUTSTR [ASCIZ/NEW PASSWORD = /]
PUSHJ P,GETP ;GET A PASSWORD
SETZM PHRASE ;NULL PASSWORD
MOVE A,PHRASE ;GET IT
MOVEM A,INFOS+LOSPSW ;SAVE IT
MOVE A,INFOS+PRVBIT ;GET PRIVILEGES
PUSHJ P,PRVGET ;GET A NEW SET OF PRIVILEGES
PUSHJ P,PROGET ;GET NEW PROTECTION BITS
MOVSM B,INFOS+DEFPRO ;SAVE NEW PROTECTION BITS IN LH
MOVE D,(P)
OUTSTR [ASCIZ/
DATA FOR THIS USER IS NOW:
/]
PUSHJ P,MTYPE
POP P,D ;GET D BACK AGAIN
OUTSTR [ASCIZ/WRITE THIS NOW? /]
PUSHJ P,YORN
POPJ P, ;NO
MOVE K,(D) ;GET USER NAME
MOVSI L,'UFD'
SETZ M,
MOVE N,GOD
LOOKUP DMP,K
JRST MODIF4 ;CAN'T ENTER
; SETZM INFOS+LASDAT+1
; MOVE K,[XWD INFOS+LASDAT+1,INFOS+LASDAT+2]
; BLT K,INFOS+INFON-1
MTAPE DMP,WRINFO ;WRITE DATA INTO FILE
JRST MODIF5 ;ERROR
CLOSE DMP, ;RELEASE FILE
POPJ P,
MODIF4: OUTSTR [ASCIZ/
UFD LOOKUP FAILED
/]
POPJ P,
MODIF5: CLOSE DMP,
OUTSTR [ASCIZ/INFO WRITE FAILED
/]
POPJ P,
MTYPE: MOVE A,(D) ;GET THE PPN
PUSHJ P,TYPPN
MOVEI A,11
PUSHJ P,PUTCHR
SKIPN A,INFOS+LOSPSW
JRST MTYPE1
PUSHJ P,SIXOUT
MOVEI A,"%"
SKIPGE 2(D)
PUSHJ P,PUTCHR
MTYPE1: SKIPE A,INFOS+PRVBIT
PUSHJ P,PRVTYP
MOVEI B,CRLF
JRST PUTSTR
MOVE A,INFOS+DEFPRO
PUSHJ P,PROTYP ;TYPE PROTECTION PART
MOVEI B,CRLF
JRST PUTSTR
DOINRD: MTAPE DMP,INRD ;READ RETRIEVAL
POPJ P, ;ERROR
AOS (P)
MOVEM A,1(P)
HRRZ A,(D) ;GET USER NAME
; CAIE A,'REG' ;SPECIAL?
JRST DOINR0 ;YES.
DOINR1: SKIPE A,FILE0+LOSPSW+INFBAS
MOVE A,['QRALPH']
MOVEM A,FILE0+LOSPSW+INFBAS
DOINR0: MOVE A,1(P) ;GET DATA BACK
POPJ P,
SUBTTL READ UFD
RMFD: MOVE A,GOD
MOVSI B,'UFD'
SETZ C,
MOVE D,GOD
MOVEI W,UFDN
ADDM W,JOBFF ;INCREMENT JOBFF TO LEAVE SOME ROOM
PUSHJ P,DREAD
EXIT ;THIS BETTER NOT HAPPEN. EVER
SUB W,[XWD UFDN,UFDN]
MOVEM W,MFDPT ;SAVE POINTER TO MFD
MOVE A,GOD
MOVSI B,'UFD'
SETZ C,
MOVEI D,MFDTRK ;1 IS THE TRACK ADDRESS OF MFD
MOVEI X,1(W)
HRLI X,A ;SOURCE,,DESTINATION IN X
BLT X,4(W) ;SAVE THE STUFF
POPJ P, ;RETURN
SUBTTL DREAD READ A WHOLE FILE IN DUMP MODE.
; SET A,B,C,D TO A LOOKUP BLOCK.
; SKIP RETURN IF OK. W IS IOWD FOR DATA. FILE READ INTO JOBFF
; NON SKIP: MESSAGE WILL BE TYPED
DREAD: SETZB W,X ;ZERO THINGS TO START RIGHT
LOOKUP DMP,A ;LOOK FOR THE FILE
JRST DREAD1 ;FILE NOT FOUND. CODE IN B
HRR D,JOBFF ;GET JOBFF
SUBI D,1 ;MAKE THIS AN IOWD
MOVE W,D ;SAVE THE IOWD
HLRE C,D ;GET - LENGTH OF FILE
MOVN B,C ;GET + FILE LENGTH
ADDB B,JOBFF ;RESET JOBFF
CAMG B,JOBREL ;IS IT TOO BIG?
JRST .+3 ;NO. WE'RE OK
CORE B, ;MAKE ENOUGH CORE HAPPEN
JRST NOCORE ;THIS IS A LOSS
INPUT DMP,W ;USE THE IOWD IN W TO READ THE WHOLE
STATZ DMP,740000 ;CHECK TRANSFER STATUS
JRST DREAD2 ;LOSING STATUS
CLOSE DMP, ;RELEASE THE FILE
JRST CPOPJ1 ;GIVE THE OK RETURN
DREAD1: CAME A,['ALFACT'] ;NO MESSAGE IF ACCOUNTING LOSES.
TRNE FL,PTYLIN
JRST DREAD4
OUTSTR [ASCIZ/LOOKUP FAILURE. FILE = /]
PUSH P,A
PUSH P,B ;SAVE FILE AND CODE
PUSHJ P,TYFIL ;WRITE FILE NAME
OUTSTR [ASCIZ/; CODE = /]
HRRZ A,(P) ;GET FROM STACK
JRST DREAD3
DREAD2: TRNE FL,PTYLIN
JRST DREAD4
OUTSTR [ASCIZ/I-O ERROR. FILE = /]
PUSH P,A
PUSH P,B
PUSHJ P,TYFIL
OUTSTR [ASCIZ/; STATUS = /]
GETSTS DMP,A
DREAD3: PUSHJ P,OCTOUT
OUTSTR CRLF
POP P,B
POP P,A
DREAD4: CLOSE DMP,
POPJ P,
SUBTTL INITIALIZE
BEGIN: RESET ;A GOOD WAY TO START THE DAY
MOVE P,[IOWD PDLEN,PDLIST] ;INITIALIZE PDL
SETOM CKCODE ;ASSUME LEGITIMATE USER.
INIT DMP,217 ;GET A DISK CHANNEL FOR USE LATER
'DSK '
0
JRST NODISK ;THIS IS TERRIBLE
PUSHJ P,TTYINI ;GET A TTY
DATE A, ;GET CURRENT DATE
TIMER B, ;AND TIME IN TICKS SINCE MIDNITE
IDIVI B,74*74 ;DIVIDE TICKS TO MAKE MINUTES
HRL B,A ;MAKE DATE,,TIME
MOVEM B,NOW ;SAVE TIME
SETO A, ;SET A TO GET LINE CHARACTERISTICS
TTCALL 6,A ;GET LINE CHARACTERISTICS
MOVEM A,LINCHR ;LINE CHARACTERISTICS WORD
TLNE A,DPYBIT+DDBIT ;EITHER DATA DISK OR III?
TRO FL,DPYLIN ;YES FLAG IT
TLNE A,CTYBIT ;CTY?
TRO FL,CTYLIN ;YES
TLNE A,PTYBIT
TROA FL,PTYLIN ;FLAG A PTY
JRST BEGNPT ;THIS IS NOT A PTY.
TLNE A,IMPBIT ;IS THIS AN IMP?
TRC FL,IMPLIN+PTYLIN ;YES. SET IMP AND NOT PTY.
MOVEI A,TTYNUM ;PEEK INTO SYSTEM
PEEK A,
LDB B,[POINT 9,A,8] ;
LDB C,[POINT 9,A,17];
ADDI B,1(C)
LDB C,[POINT 9,A,26]
ADDI B,(C)
HRRZ A,LINCHR
SUBI A,(B)
SETZM PTYPPN ;CLEAR PPN OF OWNER
SETZM PTYTJB
JUMPL A,BEGNPT ;THIS CAN'T HAPPEN?
MOVEI B,PTYJOB
PEEK B,
ADDI B,(A)
PEEK B,
MOVEM B,PTYTJB ;JOB NUMBER OF CONTROLLING JOB.
TLNE FL,IMPLIN ;IS THIS AN IMP ALREADY?
JRST BEGNPT ;YES. (PTYTJB IS SETUP)
GETPRV B, ;USER'S PRIVILEGES
TLNN B,1 ;LOCAL USER?
TRC FL,IMPLIN!PTYLIN ;NO TURN ON IMPLIN
MOVEI A,PRJPRG
PEEK A,
ADD A,PTYTJB
PEEK A,
MOVEM A,PTYPPN ;PPN OF PTY OWNER.
BEGNPT: JRST USRMOD ;NO. RUN THE USER MODE PORTION
SUBTTL DO-ALL SCANNER. MAXIMUM UTILITY AND INTOLERANCE.
GETP: SETZB B,PHRASE ;B = SIXBIT ACC. PHRASE 1
SETZB C,PHRASE+1 ;C WILL COUNT PHRASES,, PHRASE 2
MOVEI D,40 ;WE WILL WAIT 32 SECONDS FOR TYPIN
INCHWL A ;SPECIAL. WE'LL WAIT FOREVER
JRST GETCK ;OK. WE SAW ONE.
GETCH: INCHRS A ;GET ANOTHER, OR SKIP
POPJ P, ;NOTHING THERE. WE MAKE AN ERROR
GETCK: JUMPE A,GETCH ;FLUSH NULLS. NO ONE CAN SEND THEM.
JFCL ;PATCH HERE.
CAIN A,12 ;LF ENDS EVERYTHING
JRST GETHF ;ALL DONE
CAIN A,15
JRST GETCH ;FLUSH CR
CAIE A,40
CAIN A,11
JRST [ ; JUMPE C,GETCH ;FLUSH BLANKS AND TABS IN FIRST TERM
JUMPE B,GETCH ;FLUSH LEADING BLANKS AND TABS
JRST GETHF] ;ASSUME THAT WE'VE SEEN WHOLE TERM
CAIN A,175 ;IS THIS AN ALTMODE?
EXIT ;YES. ABORT LOGIN
CAIN A,"⊗" ;SPECIAL?
JRST SETDDT ;YES GO SET THE DEBUG MODE
CAIE A,"," ;COMMA DELIMITS PHRASE 1.
CAIN A,"/" ;SO DOES SLASH
JRST GETHF0 ;GO ANNOUNCE THE DELIMITER.
CAIE A,"." ;ALLOW THIS AS QUICKIE ALSO -- RPH
CAIN A,"|"
JRST GETHFA
CAIN A,"%" ;SO DOES %
JRST GETHF0 ;DO THE DELIMITER THING
CAIL A,"0"
CAILE A,"9"
JRST .+2
JRST GETCON ;ALLOW DIGITS THROUGH
CAIL A,"a"
CAILE A,"z"
JRST .+2 ;NOT LOWER CASE
TRZ A,40 ;MAKE UPPER CASE
CAIL A,"A"
CAILE A,"Z"
JRST [SETOM PHRASE ;THIS IS A LOSER
POPJ P,]
GETCON: SUBI A,40 ;MAKE SIXBIT
ANDI A,77 ;SCRAPE OFF ANY EXCESS BITS.
TLNE B,770000 ;DON'T SHIFT TOO FAR
JRST GETCH ;TOO FAR. IGNORE ANYTHING ELSE
LSH B,6 ;MAKE ROOM.
IOR B,A
JRST GETCH ;GO GET SOME MORE.
GETHFA: TRO FL,NODATE ;TURN ON FLAG
GETHF0: MOVE K,A ;SAVE THE DELIMITER HERE.
GETHF: JUMPE B,CPOPJ ;NO JUSTIFICATION FOR NOTHING.
MOVEM B,PHRASE(C)
CAIN A,12
JRST CPOPJ1
SETZB B,D
JUMPG C,SSCAN ;SCAN FOR SERVICE LEVEL
AOJA C,GETCH ;INCREMENT TERM COUNTER
SSCAN: INCHRS A ;GET A CHARACTER
POPJ P, ;NO GOOD
CAIN A,12 ;LINE FEED?
JRST SSCANX ;YES THATS ALL
CAIN A,15 ;FLUSH CR
JRST SSCAN
CAIE A,40
CAIN A,11
JRST SSCAN ;FLUSH BLANK,TAB
CAIL A,"0" ;SKIP IF TOO SMALL
CAILE A,"9"
POPJ P, ; THIS IS A LOSS
IMULI D,12 ;ACCUMULATE IN D
ADDI D,-"0"(A) ;ADD IN DIGIT
JRST SSCAN
SSCANX: JRST CPOPJ1 ;DO THE SKIP RETURN
YORN: MOVEI B,74 ;60 SECONDS OF WAITING
CLRBFI ;FLUSH THE WORLD FIRST
YORN0: MOVEI A,1 ;SLEEP 1 SECOND
SLEEP A, ;SLEEP 1 SECOND
INCHRS A ;LOOK FOR A CHARACTER
JRST YORN0 ;NOT THERE, WAIT
CLRBFI
OUTSTR CRLF
CAIE A,"Y"
CAIN A,"y"
JRST CPOPJ1 ;SKIP RETURN FOR "Y"
CAIE A,175 ;LOOK FOR ALTMODE
POPJ P, ;IS OK
EXIT ;KILL THE BASTARD
SETDDT: SKIPN JOBDDT ;SKIP IF WE HAVE DDT
POPJ P, ;ILLEGAL CHARACTER IN SCAN
OUTSTR [ASCIZ/(DDT)
/] ;TELL HIM WHERE ITS AT.
JRST @JOBDDT ;JUMP TO DDT
CPOPJ1: AOS (P)
CPOPJ: POPJ P, ;RETURN
END BEGIN